home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / langs / c68_445b.zoo / src / diffs.445 next >
Encoding:
Text File  |  1995-01-30  |  36.1 KB  |  1,351 lines

  1. diff -w -c org/analyze.c src/analyze.c
  2. *** org/analyze.c    Wed Jun 15 15:50:23 1994
  3. --- src/analyze.c    Tue Jan 17 08:14:20 1995
  4. ***************
  5. *** 465,470 ****
  6. --- 465,475 ----
  7.       if (csp->voidf || (csp->exp->nodetype == en_icon &&
  8.                  csp->exp->v.i < 16 && csp->exp->v.i >= 0))
  9.       return 0;
  10. + #ifdef TRAP_GEN
  11. +     if (trap_option && csp->exp->nodetype == en_nacon &&
  12. +     !strncmp(csp->exp->v.sp, "_trap_1", (size_t)7))
  13. +     return 0;
  14. + #endif /* TRAP_GEN */
  15.       if (is_lvalue(csp->exp))
  16.       return 2 * csp->uses;
  17.       return csp->uses;
  18. ***************
  19. *** 478,488 ****
  20.       CSE    **lst;
  21.   {
  22.       CSE     *csp1, *csp2;
  23.       csp1 = *lst;
  24.       if (csp1 == 0 || csp1->next == 0)
  25.       return;
  26.       bsort(&(csp1->next));
  27. !     while (csp1 != 0 && (csp2 = csp1->next) != 0 && desire(csp1) < desire(csp2)) {
  28.       *lst = csp2;
  29.       csp1->next = csp2->next;
  30.       csp2->next = csp1;
  31. --- 483,495 ----
  32.       CSE    **lst;
  33.   {
  34.       CSE *csp1, *csp2;
  35. +     register int d1;
  36.       csp1 = *lst;
  37.       if (csp1 == 0 || csp1->next == 0)
  38.       return;
  39.       bsort(&(csp1->next));
  40. !     d1 = desire(csp1);
  41. !     while (csp1 != 0 && (csp2 = csp1->next) != 0 && d1 < desire(csp2)) {
  42.       *lst = csp2;
  43.       csp1->next = csp2->next;
  44.       csp2->next = csp1;
  45. diff -w -c org/cglbdec.h src/cglbdec.h
  46. *** org/cglbdec.h    Wed Jun 15 15:50:23 1994
  47. --- src/cglbdec.h    Tue Jan 17 08:11:16 1995
  48. ***************
  49. *** 97,102 ****
  50. --- 97,105 ----
  51.   #ifdef TRACE
  52.   extern BOOL    trace_option;    /* generate trace code */
  53.   #endif /* TRACE */
  54. + #ifdef TRAP_GEN
  55. + extern BOOL    trap_option;    /* generate traps for gemdos, xbios and bios */
  56. + #endif /* TRAP_GEN */
  57.   extern int    max_error_count; /* maximum number of errors before stopping */
  58.   
  59.   extern TYP     *ret_type;
  60. ***************
  61. *** 147,152 ****
  62. --- 150,158 ----
  63.   #ifdef TARGET_ACK
  64.   extern struct funcs    ack68k_funcs;
  65.   #endif /* TARGET_ACK */
  66. + #ifdef TARGET_JAS
  67. + extern struct funcs    jas68k_funcs;
  68. + #endif /* TARGET_JAS */
  69.   #ifdef TARGET_GAS
  70.   extern struct funcs    gas68k_funcs;
  71.   #endif /* TARGET_GAS */
  72. diff -w -c org/cglbdef.c src/cglbdef.c
  73. *** org/cglbdef.c    Wed Jun 15 15:50:23 1994
  74. --- src/cglbdef.c    Tue Jan 17 08:10:38 1995
  75. ***************
  76. *** 116,122 ****
  77.   #endif /* FORMAT_OPTION */
  78.   #ifdef TRACE
  79.   BOOL     trace_option        = 0;
  80. ! #endif
  81.   #ifdef PROBES
  82.   BOOL     probe_option        = 0;
  83.   #endif /* PROBES */
  84. --- 116,125 ----
  85.   #endif /* FORMAT_OPTION */
  86.   #ifdef TRACE
  87.   BOOL     trace_option        = 0;
  88. ! #endif /* TRACE */
  89. ! #ifdef TRAP_GEN
  90. ! BOOL     trap_option        = 0;
  91. ! #endif /* TRAP_GEN */
  92.   #ifdef PROBES
  93.   BOOL     probe_option        = 0;
  94.   #endif /* PROBES */
  95. ***************
  96. *** 203,208 ****
  97. --- 206,214 ----
  98.   #ifdef TARGET_ACK
  99.   struct funcs    *Funcs  = &ack68k_funcs;
  100.   #else
  101. + #ifdef TARGET_JAS
  102. + struct funcs    *Funcs    = &jas68k_funcs;
  103. + #else
  104.   #ifdef TARGET_GAS
  105.   struct funcs    *Funcs  = &gas68k_funcs;
  106.   #else
  107. ***************
  108. *** 214,219 ****
  109. --- 220,226 ----
  110.   #endif /* TARGET_QMAC */
  111.   #endif /* TARGET_CPM */
  112.   #endif /* TARGET_GAS */
  113. + #endif /* TARGET_JAS */
  114.   #endif /* TARGET_ACK */
  115.   #endif /* MC680X0 */
  116.   
  117. diff -w -c org/chdr.h src/chdr.h
  118. *** org/chdr.h    Wed Jun 15 15:50:31 1994
  119. --- src/chdr.h    Tue Jan 17 08:04:44 1995
  120. ***************
  121. *** 570,576 ****
  122.   #define    WARN_LEVEL2    WARN_AUTOINIT
  123.       WARN_AUTOINIT,
  124.       WARN_NOHEX,
  125. -     WARN_PARAMSIZE,
  126.       WARN_REDEFINE,
  127.       WARN_SIZEOF0,
  128.       WARN_SIZEOFBIG,
  129. --- 570,575 ----
  130. ***************
  131. *** 606,611 ****
  132. --- 605,611 ----
  133.       WARN_IMPLICIT,
  134.       WARN_NOTKANDR,
  135.       WARN_NOTREACHED,
  136. +     WARN_PARAMSIZE,
  137.       WARN_PROTOTYPE,
  138.       WARN_PROMOTE,
  139.       WARN_STORAGE,
  140. diff -w -c org/check.h src/check.h
  141. *** org/check.h    Wed Jun 15 15:50:23 1994
  142. --- src/check.h    Tue Jan 17 08:04:50 1995
  143. ***************
  144. *** 125,137 ****
  145. --- 125,164 ----
  146.   #ifdef TARGET_GAS
  147.   #define MULTIPLE_ASSEMBLERS
  148.   #endif /* TARGET_GAS */
  149. + #ifdef TARGET_QMAC
  150. + #define MULTIPLE_ASSEMBLERS
  151. + #endif /* TARGET_QMAC */
  152. + #ifdef TARGET_JAS
  153. + #define MULTIPLE_ASSEMBLERS
  154. + #endif /* TARGET_JAS */
  155.   #endif /* TARGET_ACK */
  156.   
  157.   #ifdef TARGET_CPM
  158.   #ifdef TARGET_GAS
  159.   #define MULTIPLE_ASSEMBLERS
  160.   #endif /* TARGET_GAS */
  161. + #ifdef TARGET_QMAC
  162. + #define MULTIPLE_ASSEMBLERS
  163. + #endif /* TARGET_QMAC */
  164. + #ifdef TARGET_JAS
  165. + #define MULTIPLE_ASSEMBLERS
  166. + #endif /* TARGET_JAS */
  167.   #endif /* TARGET_CPM */
  168. + #ifdef TARGET_GAS
  169. + #ifdef TARGET_QMAC
  170. + #define MULTIPLE_ASSEMBLERS
  171. + #endif /* TARGET_QMAC */
  172. + #ifdef TARGET_JAS
  173. + #define MULTIPLE_ASSEMBLERS
  174. + #endif /* TARGET_JAS */
  175. + #endif /* TARGET_GAS */
  176. + #ifdef TARGET_QMAC
  177. + #ifdef TARGET_JAS
  178. + #define MULTIPLE_ASSEMBLERS
  179. + #endif /* TARGET_JAS */
  180. + #endif /* TARGET_QMAC */
  181.   #endif /* MC680X0 */
  182.   
  183.   #ifdef INTEL_386
  184. ***************
  185. *** 191,193 ****
  186. --- 218,232 ----
  187.   #endif /* TARGET_SYSV */
  188.   #endif /* TARGET_SUN */
  189.   #endif /* INTEL_8086 */
  190. + #ifdef TRAP_GEN
  191. + #if !defined(MC680X0) || !defined(__TOS__)
  192. + error, cannot do trap generation
  193. + #endif
  194. + #endif /* TRAP_GEN */
  195. + #ifdef JAS_PATCH
  196. + #if !defined(TARGET_JAS) || defined(MULTIPLE_ASSEMBLERS) || defined(RELOC_BUG)
  197. + error, cannot use jas patch
  198. + #endif
  199. + #endif /* JAS_PATCH */
  200. diff -w -c org/cmain.c src/cmain.c
  201. *** org/cmain.c    Wed Jun 15 15:50:24 1994
  202. --- src/cmain.c    Tue Jan 17 08:09:54 1995
  203. ***************
  204. *** 41,46 ****
  205. --- 41,50 ----
  206.   
  207.   #undef P_
  208.   
  209. + #ifdef __MINT__
  210. + long _stksize = 32768L;
  211. + #endif
  212.   static void
  213.   exception(sig)
  214.       int             sig;
  215. ***************
  216. *** 212,219 ****
  217.   #endif /* PROBES */
  218.           {"reg",         invert,      ®_option,        NULL},
  219.           {"revbit",      invert,    &bitfield_option,    NULL},
  220. -         {"short",       invert,    &short_option,        NULL},
  221.           {"separate",    invert,    &IandD_option,        NULL},
  222.   #ifdef STACK_CHECK
  223.           {"stackcheck",  invert,    &stackcheck_option,    NULL},
  224.   #endif /* STACK_CHECK */
  225. --- 216,223 ----
  226.   #endif /* PROBES */
  227.           {"reg",         invert,      ®_option,        NULL},
  228.           {"revbit",      invert,    &bitfield_option,    NULL},
  229.           {"separate",    invert,    &IandD_option,        NULL},
  230. +         {"short",       invert,    &short_option,        NULL},
  231.   #ifdef STACK_CHECK
  232.           {"stackcheck",  invert,    &stackcheck_option,    NULL},
  233.   #endif /* STACK_CHECK */
  234. ***************
  235. *** 223,228 ****
  236. --- 227,235 ----
  237.   #endif /* TRACE */
  238.           {"trad",        invert,    &trad_option,        NULL},
  239.           {"trans",       invert,    &trans_option,        NULL},
  240. + #ifdef TRAP_GEN
  241. +         {"trap",        invert,    &trap_option,        NULL},
  242. + #endif /* TRAP_GEN */
  243.           {"uchar",       invert,    &uchar_option,        NULL},
  244.   #ifdef MULTIPLE_ASSEMBLERS
  245.   #ifdef INTEL_8086
  246. ***************
  247. *** 251,256 ****
  248. --- 258,266 ----
  249.   #ifdef TARGET_ACK
  250.           {"ack68k",      chip,    &ack68k_funcs,        &mc68k_funcs},
  251.   #endif /* TARGET_ACK */
  252. + #ifdef TARGET_JAS
  253. +         {"jas68k",        chip,    &jas68k_funcs,        &mc68k_funcs},
  254. + #endif /* TARGET_JAS */
  255.   #ifdef TARGET_CPM
  256.           {"cpm68k",      chip,    &cpm68k_funcs,        &mc68k_funcs},
  257.   #endif /* TARGET_CPM */
  258. ***************
  259. *** 370,383 ****
  260.       argv++;
  261.       if (argc > 1)
  262.       /* used named file instead of stdout */
  263. !     if ((output = fopen(*argv, "w")) == NULL) {
  264.           message(MSG_OPENFILE,*argv,message_text(MSG_OUTPUT));
  265.           exit(2);
  266.       }
  267.       argv++;
  268.       if (argc > 2)
  269.       /* used named listing file instead of stderr */
  270. !     if ((listfile = fopen(*argv, "w")) == NULL) {
  271.           message(MSG_OPENFILE,*argv,message_text(MSG_LISTING));
  272.           exit(2);
  273.       }
  274. --- 380,393 ----
  275.       argv++;
  276.       if (argc > 1)
  277.       /* used named file instead of stdout */
  278. !     if ((output = fopen(*argv, "wb")) == NULL) {
  279.           message(MSG_OPENFILE,*argv,message_text(MSG_OUTPUT));
  280.           exit(2);
  281.       }
  282.       argv++;
  283.       if (argc > 2)
  284.       /* used named listing file instead of stderr */
  285. !     if ((listfile = fopen(*argv, "wb")) == NULL) {
  286.           message(MSG_OPENFILE,*argv,message_text(MSG_LISTING));
  287.           exit(2);
  288.       }
  289. diff -w -c org/config.c68 src/config.c68
  290. *** org/config.c68    Wed Jun 15 15:50:24 1994
  291. --- src/config.c68    Tue Jan 17 08:05:02 1995
  292. ***************
  293. *** 24,30 ****
  294.   #define    HAS_STDARG        /* system supports stdarg.h */
  295.   #define    FORMAT_CHECK        /* Check fprintf and fscanf format strings */
  296.   #undef    PROBES            /* Support stack probes */
  297. ! #undef    STACK_CHECK        /* library routine to check stack size */
  298.   /*
  299.    *    These options tend not to be changed except when developing
  300.    */
  301. --- 24,30 ----
  302.   #define    HAS_STDARG        /* system supports stdarg.h */
  303.   #define    FORMAT_CHECK        /* Check fprintf and fscanf format strings */
  304.   #undef    PROBES            /* Support stack probes */
  305. ! #define    STACK_CHECK        /* library routine to check stack size */
  306.   /*
  307.    *    These options tend not to be changed except when developing
  308.    */
  309. ***************
  310. *** 79,85 ****
  311.   #undef    MC68020            /* This is an 68020 compiler */
  312.   #undef    MC68030            /* This is an 68030 compiler */
  313.   
  314. ! #define    TARGET_ACK        /* Generate ACK assembler output */
  315.   #undef    TARGET_CPM        /* Generate DRI assembler output */
  316.   #undef    TARGET_GAS        /* Generate GAS assembler output */
  317.   #undef    TARGET_QMAC        /* Generate QMAC assembler output */
  318. --- 79,86 ----
  319.   #undef    MC68020            /* This is an 68020 compiler */
  320.   #undef    MC68030            /* This is an 68030 compiler */
  321.   
  322. ! #undef    TARGET_ACK        /* Generate ACK assembler output */
  323. ! #define    TARGET_JAS        /* Generate JAS assembler output */
  324.   #undef    TARGET_CPM        /* Generate DRI assembler output */
  325.   #undef    TARGET_GAS        /* Generate GAS assembler output */
  326.   #undef    TARGET_QMAC        /* Generate QMAC assembler output */
  327. ***************
  328. *** 90,98 ****
  329.    *    of ACK has this bug fixed, then in some cases slightly more
  330.    *    efficient code is generated if you comment out this option
  331.    */
  332. ! #define    MOVEMBUG        /* Assembler has problems in MOVEM */
  333. ! #define    CMP_BUG            /* Assembler has problems in CMP */ 
  334. ! #define    RELOC_BUG        /* Assembler has problems with Label1-Label2 */
  335.   
  336.   /*
  337.    *    INTEL 386 OPTIONS
  338. --- 91,99 ----
  339.    *    of ACK has this bug fixed, then in some cases slightly more
  340.    *    efficient code is generated if you comment out this option
  341.    */
  342. ! #undef    MOVEMBUG        /* Assembler has problems in MOVEM */
  343. ! #undef    CMP_BUG            /* Assembler has problems in CMP */ 
  344. ! #undef    RELOC_BUG        /* Assembler has problems with Label1-Label2 */
  345.   
  346.   /*
  347.    *    INTEL 386 OPTIONS
  348. ***************
  349. *** 138,144 ****
  350.    *    Ensure that the setting is compatible with the value defined in your
  351.    *    library and header files.
  352.    */
  353. ! #define    TP_SIZE        tp_uint    /* size_t type; either tp_uint or tp_ulong */
  354.   /*
  355.    *    Many K&R compilers have assumed that the result of the pointer
  356.    *    difference operation is an int.  However ANSI assumes that the
  357. --- 139,145 ----
  358.    *    Ensure that the setting is compatible with the value defined in your
  359.    *    library and header files.
  360.    */
  361. ! #define    TP_SIZE        tp_ulong /* size_t type; either tp_uint or tp_ulong */
  362.   /*
  363.    *    Many K&R compilers have assumed that the result of the pointer
  364.    *    difference operation is an int.  However ANSI assumes that the
  365. ***************
  366. *** 146,152 ****
  367.    *    with the value defined in your library and header files.
  368.    *     NOTE: This must be a signed value.
  369.    */
  370. ! #define    TP_PTRDIFF    tp_int    /* ptrdiff_t type; either tp_int or tp_long */
  371.   
  372.   /*
  373.    *    The type of a wide character is implementation defined and has an
  374. --- 147,153 ----
  375.    *    with the value defined in your library and header files.
  376.    *     NOTE: This must be a signed value.
  377.    */
  378. ! #define    TP_PTRDIFF    tp_long    /* ptrdiff_t type; either tp_int or tp_long */
  379.   
  380.   /*
  381.    *    The type of a wide character is implementation defined and has an
  382. diff -w -c org/decl.c src/decl.c
  383. *** org/decl.c    Wed Jun 15 15:50:24 1994
  384. --- src/decl.c    Tue Jan 17 08:05:12 1995
  385. ***************
  386. *** 567,574 ****
  387.   TYP *
  388.   type_name()
  389.   {
  390. !     TYP        *tp;
  391. !     SYM    *sp = 0;
  392.       STORAGE    sc;
  393.   
  394.       switch (lastst) {
  395. --- 567,574 ----
  396.   TYP *
  397.   type_name()
  398.   {
  399. !     TYP        *tp = 0;
  400. !     SYM        *sp;
  401.       STORAGE    sc;
  402.   
  403.       switch (lastst) {
  404. diff -w -c org/expr.c src/expr.c
  405. *** org/expr.c    Wed Jun 15 15:50:25 1994
  406. --- src/expr.c    Tue Jan 17 08:05:24 1995
  407. ***************
  408. *** 583,589 ****
  409.       EXPR    **node;
  410.       TYP        *tp;
  411.   {
  412. !     EXPR    *pnode;
  413.       TYP        *tp1;
  414.       switch (tp->type) {
  415.         case bt_func:    /* ANSI - functions automatically dereferenced */
  416. --- 583,589 ----
  417.       EXPR    **node;
  418.       TYP        *tp;
  419.   {
  420. !     EXPR    *pnode = 0;
  421.       TYP        *tp1;
  422.       switch (tp->type) {
  423.         case bt_func:    /* ANSI - functions automatically dereferenced */
  424. ***************
  425. *** 1143,1149 ****
  426.           fstr = get_stringlit(ep2->v.l);
  427.           format_position = format_start;
  428.           } else if (fstr) {
  429. !         fstr = (pf->func)(fname, pnum, fstr, &format_position, tp);
  430.           }
  431.       }
  432.   #endif /*FORMAT_CHECK*/
  433. --- 1143,1149 ----
  434.           fstr = get_stringlit(ep2->v.l);
  435.           format_position = format_start;
  436.           } else if (fstr) {
  437. !         fstr = (*pf->func)(fname, pnum, fstr, &format_position, tp);
  438.           }
  439.       }
  440.   #endif /*FORMAT_CHECK*/
  441. ***************
  442. *** 1168,1174 ****
  443.       message(ERR_COUNTPARAM, fname);
  444.   #ifdef FORMAT_CHECK
  445.       else if (format_option && (fstr != 0))
  446. !     VOIDCAST (pf->func)(fname, pnum, fstr, &format_position, NIL_TYP);
  447.   #endif /* FORMAT_CHECK */
  448.       return ep1;
  449.   }
  450. --- 1168,1174 ----
  451.       message(ERR_COUNTPARAM, fname);
  452.   #ifdef FORMAT_CHECK
  453.       else if (format_option && (fstr != 0))
  454. !     VOIDCAST (*pf->func)(fname, pnum, fstr, &format_position, NIL_TYP);
  455.   #endif /* FORMAT_CHECK */
  456.       return ep1;
  457.   }
  458. diff -w -c org/gen.h src/gen.h
  459. *** org/gen.h    Wed Jun 15 15:50:25 1994
  460. --- src/gen.h    Tue Jan 17 08:05:34 1995
  461. ***************
  462. *** 108,113 ****
  463. --- 108,116 ----
  464.       op_slo,
  465.       op_sls,
  466.       op_st,
  467. + #ifdef TRAP_GEN
  468. +     op_trap,
  469. + #endif /* TRAP_GEN */
  470.       op_line,
  471.       op_label
  472.   };
  473. ***************
  474. *** 118,129 ****
  475.   enum e_am {
  476.       am_dreg,        /* Dn */
  477.       am_areg,        /* An */
  478. !     am_ind,        /*    */
  479.       am_ainc,        /* (An)+ */
  480.       am_adec,        /* -(An) */
  481.       am_indx,        /* (d16,An) */
  482. !     am_indx2,        /* (d8,An,Dn) */
  483. !     am_indx3,        /* (d8,An,Am) */
  484.       am_direct,        /* (xxx) */
  485.       am_immed,        /* #(data) */
  486.       am_smask,        /* Register mask (D0 high, A7 low) */
  487. --- 121,135 ----
  488.   enum e_am {
  489.       am_dreg,        /* Dn */
  490.       am_areg,        /* An */
  491. !     am_ind,        /* (An) */
  492.       am_ainc,        /* (An)+ */
  493.       am_adec,        /* -(An) */
  494.       am_indx,        /* (d16,An) */
  495. !     am_indx2,        /* (d8,An,Dn.l) */
  496. !     am_indx3,        /* (d8,An,Am.l) */
  497. ! #ifdef JAS_PATCH
  498. !     am_indx4,        /* (d8,An,Dn.w) */
  499. ! #endif /* JAS_PATCH */
  500.       am_direct,        /* (xxx) */
  501.       am_immed,        /* #(data) */
  502.       am_smask,        /* Register mask (D0 high, A7 low) */
  503. ***************
  504. *** 140,146 ****
  505. --- 146,156 ----
  506.   #define FRAMEPTR  14        /* frame pointer register */
  507.   #define STACKPTR  15        /* system stack pointer register */
  508.   
  509. + #ifndef __TOS__
  510.   #define MAX_ADDR 1        /* max. scratch address register (A1) */
  511. + #else
  512. + #define MAX_ADDR 2        /* OS-traps may destroy A2 */
  513. + #endif /* __TOS__ */
  514.   #define MAX_DATA 2        /* max. scratch data    register (D2) */
  515.   
  516.   /* support routines */
  517. ***************
  518. *** 585,611 ****
  519.   
  520.   #undef P_
  521.   
  522. ! #define    put_code(op,len,aps,apd)    (Funcs->Put_code)(op,len,aps,apd)
  523. ! #define    put_string(s)            (Funcs->Put_string)(s)
  524. ! #define    put_label(lab)            (Funcs->Put_label)(lab)
  525. ! #define    put_byte(val)            (Funcs->Put_byte)(val)
  526. ! #define    put_char(val)            (Funcs->Put_char)(val)
  527. ! #define    put_word(val)            (Funcs->Put_word)(val)
  528. ! #define    put_long(val)            (Funcs->Put_long)(val)
  529. ! #define    put_pointer(node)        (Funcs->Put_pointer)(node)
  530. ! #define    put_short(node)            (Funcs->Put_short)(node)
  531. ! #define    put_storage(sp,align)        (Funcs->Put_storage)(sp,align)
  532. ! #define    dumplits()            (Funcs->Dumplits)()
  533. ! #define    put_external(s)            (Funcs->Put_external)(s)
  534. ! #define    put_global(s)            (Funcs->Put_global)(s)
  535. ! #define    put_align(align)        (Funcs->Put_align)(align)
  536. ! #define    nl()                (Funcs->Nl)()
  537. ! #define    cseg()                (Funcs->Cseg)()
  538. ! #define    dseg()                (Funcs->Dseg)()
  539.   #ifdef FLOAT_SUPPORT
  540. ! #define    put_float(val)            (Funcs->Put_float)(val)
  541. ! #define put_double(val)            (Funcs->Put_double)(val)
  542. ! #define put_longdouble(val)        (Funcs->Put_longdouble)(val)
  543.   #endif /* FLOAT_SUPPORT */
  544.   #endif /* MULTIPLE_ASSEMBLERS */
  545.   
  546. --- 595,621 ----
  547.   
  548.   #undef P_
  549.   
  550. ! #define    put_code(op,len,aps,apd)    (*Funcs->Put_code)(op,len,aps,apd)
  551. ! #define    put_string(s)            (*Funcs->Put_string)(s)
  552. ! #define    put_label(lab)            (*Funcs->Put_label)(lab)
  553. ! #define    put_byte(val)            (*Funcs->Put_byte)(val)
  554. ! #define    put_char(val)            (*Funcs->Put_char)(val)
  555. ! #define    put_word(val)            (*Funcs->Put_word)(val)
  556. ! #define    put_long(val)            (*Funcs->Put_long)(val)
  557. ! #define    put_pointer(node)        (*Funcs->Put_pointer)(node)
  558. ! #define    put_short(node)            (*Funcs->Put_short)(node)
  559. ! #define    put_storage(sp,align)        (*Funcs->Put_storage)(sp,align)
  560. ! #define    dumplits()            (*Funcs->Dumplits)()
  561. ! #define    put_external(s)            (*Funcs->Put_external)(s)
  562. ! #define    put_global(s)            (*Funcs->Put_global)(s)
  563. ! #define    put_align(align)        (*Funcs->Put_align)(align)
  564. ! #define    nl()                (*Funcs->Nl)()
  565. ! #define    cseg()                (*Funcs->Cseg)()
  566. ! #define    dseg()                (*Funcs->Dseg)()
  567.   #ifdef FLOAT_SUPPORT
  568. ! #define    put_float(val)            (*Funcs->Put_float)(val)
  569. ! #define put_double(val)            (*Funcs->Put_double)(val)
  570. ! #define put_longdouble(val)        (*Funcs->Put_longdouble)(val)
  571.   #endif /* FLOAT_SUPPORT */
  572.   #endif /* MULTIPLE_ASSEMBLERS */
  573.   
  574. ***************
  575. *** 643,660 ****
  576.   #endif /* MC680X0 */
  577.       };
  578.   
  579. ! #define    g_expr(node,flags)        (GFuncs->G_expr)(node,flags)
  580. ! #define    g_truejp(node,label)        (GFuncs->G_truejp)(node,label)
  581. ! #define    g_falsejp(node,label)        (GFuncs->G_falsejp)(node,label)
  582. ! #define g_stack(bytes)            (GFuncs->G_stack)(bytes)
  583. ! #define    g_switch_table(ep,sw,min,max)    (GFuncs->G_switch_table)(ep,sw,min,max)
  584. ! #define    g_switch_compare(ep,stmt)    (GFuncs->G_switch_compare)(ep,stmt)
  585. ! #define    g_entry(size)            (GFuncs->G_entry)(size)
  586. ! #define    g_return(ep,tp)            (GFuncs->G_return)(ep,tp)
  587. ! #define    g_epilogue()            (GFuncs->G_epilogue)()
  588. ! #define    allocate(csp)            (GFuncs->Allocate)(csp)
  589.   #ifdef MC680X0
  590. ! #define    is_short(node)            (GFuncs->Isshort)(node)
  591.   #endif /* MC680X0 */
  592.   #endif /* MULTIPLE_PROCESSORS */
  593.   
  594. --- 653,670 ----
  595.   #endif /* MC680X0 */
  596.       };
  597.   
  598. ! #define    g_expr(node,flags)        (*GFuncs->G_expr)(node,flags)
  599. ! #define    g_truejp(node,label)        (*GFuncs->G_truejp)(node,label)
  600. ! #define    g_falsejp(node,label)        (*GFuncs->G_falsejp)(node,label)
  601. ! #define g_stack(bytes)            (*GFuncs->G_stack)(bytes)
  602. ! #define    g_switch_table(ep,sw,min,max)    (*GFuncs->G_switch_table)(ep,sw,min,max)
  603. ! #define    g_switch_compare(ep,stmt)    (*GFuncs->G_switch_compare)(ep,stmt)
  604. ! #define    g_entry(size)            (*GFuncs->G_entry)(size)
  605. ! #define    g_return(ep,tp)            (*GFuncs->G_return)(ep,tp)
  606. ! #define    g_epilogue()            (*GFuncs->G_epilogue)()
  607. ! #define    allocate(csp)            (*GFuncs->Allocate)(csp)
  608.   #ifdef MC680X0
  609. ! #define    is_short(node)            (*GFuncs->Isshort)(node)
  610.   #endif /* MC680X0 */
  611.   #endif /* MULTIPLE_PROCESSORS */
  612.   
  613. diff -w -c org/gen68k.c src/gen68k.c
  614. *** org/gen68k.c    Wed Jun 15 15:50:26 1994
  615. --- src/gen68k.c    Wed Jan 18 02:47:40 1995
  616. ***************
  617. *** 2442,2451 ****
  618.       ADDRESS    *ap;
  619.       EXPR    *ep0 = node->v.p[0];
  620.       SIZE     size;
  621.   #ifdef FLOAT_IEEE
  622.       int         numregs;
  623.   #endif /* FLOAT_IEEE */
  624. !     /* The stack adustment cannot be delayed if:
  625.        * 1.  The alloca() routine is called
  626.        * 2.  The function call is via a variable
  627.        * 3.  The function starts with an underscore character
  628. --- 2442,2452 ----
  629.       ADDRESS    *ap;
  630.       EXPR    *ep0 = node->v.p[0];
  631.       SIZE     size;
  632. +     OPCODE     op;
  633.   #ifdef FLOAT_IEEE
  634.       int         numregs;
  635.   #endif /* FLOAT_IEEE */
  636. !     /* The stack adjustment cannot be delayed if:
  637.        * 1.  The alloca() routine is called
  638.        * 2.  The function call is via a variable
  639.        * 3.  The function starts with an underscore character
  640. ***************
  641. *** 2488,2504 ****
  642.       /* call the function */
  643.       switch (ep0->nodetype) {
  644.         case en_nacon:
  645.         case en_labcon:
  646.       ap = mk_direct(ep0);
  647.       break;
  648.         default:
  649.       ap = g_expr(ep0, F_AREG);
  650.       ap = copy_addr(ap, am_ind);
  651.       freeop(ap);
  652.       break;
  653.       }
  654. !     g_code(op_jsr, 0, ap, NIL_ADDRESS);
  655.   #ifdef FLOAT_IEEE
  656.       return func_result(flags, size, numregs);
  657.   #else
  658. --- 2489,2530 ----
  659.       /* call the function */
  660.       switch (ep0->nodetype) {
  661.         case en_nacon:
  662. + #ifdef TRAP_GEN
  663. +     if (trap_option) {
  664. +         int trap_nr = 0;
  665. +         if (!strncmp(ep0->v.sp, "_trap_1", (size_t)7))
  666. +         switch (ep0->v.sp[7]) {
  667. +         case '_':
  668. +             trap_nr = 1;
  669. +             break;
  670. +         case '3':
  671. +             trap_nr = 13;
  672. +             break;
  673. +         case '4':
  674. +             trap_nr = 14;
  675. +             break;
  676. +         }
  677. +         if (trap_nr) {
  678. +         op = op_trap;
  679. +         ap = mk_immed((long)trap_nr);
  680. +         break;
  681. +         }
  682. +     }
  683. +     /*FALLTHRU*/
  684. + #endif /* TRAP_GEN */
  685.         case en_labcon:
  686. +     op = op_jsr;
  687.       ap = mk_direct(ep0);
  688.       break;
  689.         default:
  690. +     op = op_jsr;
  691.       ap = g_expr(ep0, F_AREG);
  692.       ap = copy_addr(ap, am_ind);
  693.       freeop(ap);
  694.       break;
  695.       }
  696. !     g_code(op, 0, ap, NIL_ADDRESS);
  697.   #ifdef FLOAT_IEEE
  698.       return func_result(flags, size, numregs);
  699.   #else
  700. ***************
  701. *** 3185,3190 ****
  702. --- 3211,3219 ----
  703.       call_library(SUP_FPTST);
  704.       break;
  705.   #endif /* FLOAT_MFFP */
  706. + #if !defined(FLOAT_SUPPORT) && defined(__SOZOBONX__)
  707. +       case 0:
  708. + #endif
  709.         default:
  710.       ap = g_expr(node, F_DREG | F_MEM);
  711.       g_code(op_tst, (int) node->esize, ap, NIL_ADDRESS);
  712. ***************
  713. *** 3362,3367 ****
  714. --- 3391,3397 ----
  715.   #else
  716.       /* jump table contains 2 byte offset of case branches */
  717.       g_code(op_add, 4, ap, ap);
  718. + #ifndef JAS_PATCH
  719.       if (IandD_option) {
  720.       g_code(op_add, 4, ap, ap1);
  721.       freeop(ap1);
  722. ***************
  723. *** 3376,3393 ****
  724.       freeop(ap2);
  725.       ap2 = copy_addr(ap2, am_ind);
  726.       } else {
  727.       freeop(ap1);
  728.       ap2 = copy_addr(ap1, am_indx2);
  729.       ap2->sreg = ap->preg;
  730.       ap2->offset = mk_const(0l);
  731.       g_code(op_add, 2, ap2, ap1);
  732.       ap2 = copy_addr(ap2, am_ind);
  733.       }
  734.       sync_stack();
  735.       g_code(op_jmp, 0, ap2, NIL_ADDRESS);
  736.       if (IandD_option)
  737.       g_label (sw->beglab);
  738. ! #endif
  739.       freeop(ap);
  740.   }
  741.   
  742. --- 3406,3438 ----
  743.       freeop(ap2);
  744.       ap2 = copy_addr(ap2, am_ind);
  745.       } else {
  746. + #endif /* JAS_PATCH */
  747.       freeop(ap1);
  748.       ap2 = copy_addr(ap1, am_indx2);
  749.       ap2->sreg = ap->preg;
  750.       ap2->offset = mk_const(0l);
  751. + #ifdef JAS_PATCH
  752. +     g_code(op_lea, 0, ap2, ap1);
  753. + #else
  754.       g_code(op_add, 2, ap2, ap1);
  755. + #endif /* JAS_PATCH */
  756.       ap2 = copy_addr(ap2, am_ind);
  757. + #ifndef JAS_PATCH
  758.       }
  759. + #endif /* JAS_PATCH */
  760.       sync_stack();
  761. + #ifdef JAS_PATCH
  762. +     g_code(op_move, 2, ap2, ap);
  763. +     ap2 = copy_addr(ap1, am_indx4);
  764. +     ap2->sreg = ap->preg;
  765. +     ap2->offset = mk_const(0l);
  766. + #endif /* JAS_PATCH */
  767.       g_code(op_jmp, 0, ap2, NIL_ADDRESS);
  768. + #ifndef JAS_PATCH
  769.       if (IandD_option)
  770.       g_label (sw->beglab);
  771. ! #endif /* JAS_PATCH */
  772. ! #endif /* RELOC_BUG */
  773.       freeop(ap);
  774.   }
  775.   
  776. diff -w -c org/genstmt.c src/genstmt.c
  777. *** org/genstmt.c    Wed Jun 15 15:50:27 1994
  778. --- src/genstmt.c    Tue Jan 17 08:05:58 1995
  779. ***************
  780. *** 48,56 ****
  781.   static void genreturn P_((STMT *stmt));
  782.   static void genstmt P_((STMT *stmt));
  783.   
  784. - #undef P_
  785.   
  786.   static void
  787.   genwhile(stmt)
  788. --- 48,53 ----
  789. diff -w -c org/genutil.c src/genutil.c
  790. *** org/genutil.c    Wed Jun 15 15:50:27 1994
  791. --- src/genutil.c    Tue Jan 17 08:06:06 1995
  792. ***************
  793. *** 333,341 ****
  794.         case en_add:
  795.         case en_sub:
  796.       return tst_const(node->v.p[0]) && tst_const( node->v.p[1]);
  797. - #ifndef RELOC_BUG
  798. -       case en_cast:
  799. - #endif
  800.         case en_uminus:
  801.       return tst_const(node->v.p[0]);
  802.       }
  803. --- 333,338 ----
  804. diff -w -c org/getsym.c src/getsym.c
  805. *** org/getsym.c    Wed Jun 15 15:50:27 1994
  806. --- src/getsym.c    Sat Jan 21 14:58:20 1995
  807. ***************
  808. *** 36,48 ****
  809.   #define P_(s) ()
  810.   #endif
  811.   
  812.   /* getsym.c */
  813.   static int key            P_((char *));
  814.   static char *insert        P_((char *, TOKEN));
  815.   static char *found        P_((char *));
  816. - static int isidch         P_((int));
  817.   static int is_octal_digit    P_((int));
  818. - static int is_hex_digit        P_((int));
  819.   static int getline        P_((void));
  820.   static int getsch        P_((int));
  821.   static int radix36        P_((int));
  822. --- 36,54 ----
  823.   #define P_(s) ()
  824.   #endif
  825.   
  826. + #ifdef __MINT__
  827. + #define is_hex_digit        isxdigit
  828. + #define isidch            iscym
  829. + #else
  830. + static int isidch         P_((int));
  831. + static int is_hex_digit        P_((int));
  832. + #endif /* __MINT__ */
  833.   /* getsym.c */
  834.   static int key            P_((char *));
  835.   static char *insert        P_((char *, TOKEN));
  836.   static char *found        P_((char *));
  837.   static int is_octal_digit    P_((int));
  838.   static int getline        P_((void));
  839.   static int getsch        P_((int));
  840.   static int radix36        P_((int));
  841. ***************
  842. *** 74,80 ****
  843.   
  844.   static BOOL    overflow;
  845.   static WPTR    hash[MAXKEY];
  846. ! static char     linein[500];
  847.   static char    *lptr,*sptr;
  848.   static int      lineno;
  849.   static size_t   max_string;
  850. --- 80,86 ----
  851.   
  852.   static BOOL    overflow;
  853.   static WPTR    hash[MAXKEY];
  854. ! static char     linein[1024];
  855.   static char    *lptr,*sptr;
  856.   static int      lineno;
  857.   static size_t   max_string;
  858. ***************
  859. *** 82,92 ****
  860.   /* calculate the key for the hash function */
  861.   static int
  862.   key(p)
  863. !     char *p;
  864.   {
  865. !     int  sum;
  866.       for (sum=0; *p; )
  867. !     sum += *p++;
  868.       return (sum % MAXKEY);
  869.   }
  870.   
  871. --- 88,98 ----
  872.   /* calculate the key for the hash function */
  873.   static int
  874.   key(p)
  875. !     register char *p;
  876.   {
  877. !     register unsigned int sum;
  878.       for (sum=0; *p; )
  879. !     sum += (sum << 5) + *p++;
  880.       return (sum % MAXKEY);
  881.   }
  882.   
  883. ***************
  884. *** 153,159 ****
  885.   isidch(c)
  886.       int            c;
  887.   {
  888. !     return isalnum(c) || c == '_' || c == '$';
  889.   }
  890.   
  891.   #endif
  892. --- 159,165 ----
  893.   isidch(c)
  894.       int            c;
  895.   {
  896. !     return isalnum(c) || c == '_' /* || c == '$' */;
  897.   }
  898.   
  899.   #endif
  900. ***************
  901. *** 191,196 ****
  902. --- 197,203 ----
  903.       return (c>= '0' && c <= '7');
  904.   }
  905.   
  906. + #ifndef is_hex_digit
  907.   static int
  908.   is_hex_digit(c)
  909.       int c;
  910. ***************
  911. *** 203,208 ****
  912. --- 210,216 ----
  913.               (c>= 'A' && c<='F'));
  914.   }
  915.   
  916. + #endif
  917.   
  918.   void
  919.   initsym()
  920. diff -w -c org/msgout.c src/msgout.c
  921. *** org/msgout.c    Wed Jun 15 15:50:28 1994
  922. --- src/msgout.c    Tue Jan 17 08:06:26 1995
  923. ***************
  924. *** 52,64 ****
  925.   #  define P3(p1, p2, p3, p4, p5, p6)    (p1 p2, p3 p4, p5 p6, ...)
  926.   # else
  927.   #  define P1(p1, p2)    (p2) p1 p2;
  928. ! #  define P2(p1, p2, p3, p4, p5, p6)    (p2, p4, p6) p1 p2; p3 p4; p5 p6
  929.   # endif
  930.   #else
  931.   # include <varargs.h>
  932.   # define VA_START(a,s)    va_start(a)
  933.   # define P1(p1, p2)    (p2, va_alist) p1 p2; va_dcl
  934. ! # define P2(p1, p2, p3, p4)    (p2, p4, va_alist) p1 p2; p3 p4; va_dcl
  935.   #endif
  936.   
  937.   #ifdef HAS_NLS
  938. --- 52,64 ----
  939.   #  define P3(p1, p2, p3, p4, p5, p6)    (p1 p2, p3 p4, p5 p6, ...)
  940.   # else
  941.   #  define P1(p1, p2)    (p2) p1 p2;
  942. ! #  define P3(p1, p2, p3, p4, p5, p6)    (p2, p4, p6) p1 p2; p3 p4; p5 p6
  943.   # endif
  944.   #else
  945.   # include <varargs.h>
  946.   # define VA_START(a,s)    va_start(a)
  947.   # define P1(p1, p2)    (p2, va_alist) p1 p2; va_dcl
  948. ! # define P3(p1, p2, p3, p4)    (p2, p4, va_alist) p1 p2; p3 p4; va_dcl
  949.   #endif
  950.   
  951.   #ifdef HAS_NLS
  952. ***************
  953. *** 206,212 ****
  954.    */
  955.   /* WARN_AUTOINIT   */    "auto initialisation not reached",
  956.   /* WARN_NOHEX       */    "\\x not followed by any hex characters",
  957. - /* WARN_PARAMSIZE  */    "size of parameter %d changed by prototype on function %s",
  958.   /* WARN_REDEFINE   */    "redefinition of '%s'",
  959.   /* WARN_SIZEOF0    */    "'sizeof' value is zero",
  960.   /* WARN_SIZEOFBIG  */    "'sizeof' value %ld is greater than '65535'",
  961. --- 206,211 ----
  962. ***************
  963. *** 240,245 ****
  964. --- 239,245 ----
  965.   /* WARN_IMPLICIT   */    "argument '%s' implicitly declared 'int'",
  966.   /* WARN_NOTKANDR   */    "the use of '%s' is not allowed under strict K&R C",
  967.   /* WARN_NOTREACHED */    "statement not reached",
  968. + /* WARN_PARAMSIZE  */    "size of parameter %d changed by prototype on function %s",
  969.   /* WARN_PROTOTYPE  */    "K&R style function %s",
  970.   /* WARN_PROMOTE    */    "parameter %d to function %s() promoted to '%s'",
  971.   /* WARN_STORAGE    */    "storage specifier not at start of definition",
  972. ***************
  973. *** 284,290 ****
  974.   /*
  975.    *    Miscellaneous messages
  976.    */
  977. ! /* MSG_DEFAULTS    */   "\n\nDefault settings are:-\n",
  978.   /* MSG_ERROR       */    "error",
  979.   /* MSG_ERRORCNT       */    "\n -- %d errors found",
  980.   /* MSG_EXTRAPARAM  */    "too many parameters supplied",
  981. --- 284,290 ----
  982.   /*
  983.    *    Miscellaneous messages
  984.    */
  985. ! /* MSG_DEFAULTS    */   "\n\nDefault settings are:\n",
  986.   /* MSG_ERROR       */    "error",
  987.   /* MSG_ERRORCNT       */    "\n -- %d errors found",
  988.   /* MSG_EXTRAPARAM  */    "too many parameters supplied",
  989. diff -w -c org/optimize.c src/optimize.c
  990. *** org/optimize.c    Wed Jun 15 15:50:28 1994
  991. --- src/optimize.c    Tue Jan 17 08:06:34 1995
  992. ***************
  993. *** 318,329 ****
  994.   /*
  995.    * return which power of two i is or -1.
  996.    */
  997. !     long            i;
  998.   {
  999. !     int             p;
  1000. !     long            q;
  1001. !     q = 2;
  1002. !     p = 1;
  1003.       while (q > 0) {
  1004.       if (q == i)
  1005.           return p;
  1006. --- 318,328 ----
  1007.   /*
  1008.    * return which power of two i is or -1.
  1009.    */
  1010. !     register long   i;
  1011.   {
  1012. !     register int    p = 1;
  1013. !     register long   q = 2;
  1014.       while (q > 0) {
  1015.       if (q == i)
  1016.           return p;
  1017. diff -w -c org/out68k_ack.c src/out68k_ack.c
  1018. *** org/out68k_ack.c    Wed Jun 15 15:50:28 1994
  1019. --- src/out68k_ack.c    Tue Jan 17 08:06:42 1995
  1020. ***************
  1021. *** 170,175 ****
  1022. --- 170,178 ----
  1023.       "scs",         /* op_slo */
  1024.       "sls",         /* op_sls */
  1025.       "st",        /* op_st */
  1026. + #ifdef TRAP_GEN
  1027. +     "trap",        /* op_trap */
  1028. + #endif /* TRAP_GEN */
  1029.       ".line",    /* op_line */
  1030.       0,        /* op_label */
  1031.   };
  1032. ***************
  1033. *** 653,659 ****
  1034.       VOIDCAST time (&time_of_day);
  1035.   #endif /* VERBOSE */
  1036.       init_done++;
  1037. !     oprintf("%s Generated by %s %s %s (%s) from \"%s\"\n",
  1038.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1039.   #ifdef VERBOSE
  1040.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1041. --- 656,662 ----
  1042.       VOIDCAST time (&time_of_day);
  1043.   #endif /* VERBOSE */
  1044.       init_done++;
  1045. !     oprintf("%s Generated by %s v%s, %s (%s) from \"%s\"\n",
  1046.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1047.   #ifdef VERBOSE
  1048.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1049. diff -w -c org/out68k_cpm.c src/out68k_cpm.c
  1050. *** org/out68k_cpm.c    Wed Jun 15 15:50:29 1994
  1051. --- src/out68k_cpm.c    Tue Jan 17 08:06:50 1995
  1052. ***************
  1053. *** 170,175 ****
  1054. --- 170,178 ----
  1055.       "scs",         /* op_slo */
  1056.       "sls",         /* op_sls */
  1057.       "st",        /* op_st */
  1058. + #ifdef TRAP_GEN
  1059. +     "trap",        /* op_trap */
  1060. + #endif /* TRAP_GEN */
  1061.       "*.line",    /* op_line */
  1062.       0,        /* op_label */
  1063.   };
  1064. ***************
  1065. *** 451,457 ****
  1066.       int             val;
  1067.   {
  1068.       put_header(wordgen, (SIZE)AL_SHORT);
  1069. !     oprintf(",%d", val & 0xffff);
  1070.       outcol += 6;
  1071.   }
  1072.   
  1073. --- 454,460 ----
  1074.       int             val;
  1075.   {
  1076.       put_header(wordgen, (SIZE)AL_SHORT);
  1077. !     oprintf("%d", val & 0xffff);
  1078.       outcol += 6;
  1079.   }
  1080.   
  1081. ***************
  1082. *** 568,573 ****
  1083. --- 571,577 ----
  1084.       else
  1085.       cseg();
  1086.       for ( ; strtab != 0; strtab = strtab->next) {
  1087. +     nl();
  1088.       put_label(strtab->label);
  1089.       cp = strtab->str;
  1090.       for (len = strtab->len; len--; )
  1091. ***************
  1092. *** 619,628 ****
  1093.   {
  1094.       static BOOL    init_done = 0;
  1095.       if (init_done == 0) {
  1096.       time_t time_of_day;
  1097.       VOIDCAST time (&time_of_day);
  1098.       init_done++;
  1099. !     oprintf("%s Generated by %s %s %s (%s) from \"%s\"\n",
  1100.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1101.   #ifdef VERBOSE
  1102.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1103. --- 623,634 ----
  1104.   {
  1105.       static BOOL    init_done = 0;
  1106.       if (init_done == 0) {
  1107. + #ifdef VERBOSE
  1108.       time_t time_of_day;
  1109.       VOIDCAST time (&time_of_day);
  1110. + #endif /* VERBOSE */
  1111.       init_done++;
  1112. !     oprintf("%s Generated by %s v%s, %s (%s) from \"%s\"\n",
  1113.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1114.   #ifdef VERBOSE
  1115.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1116. ***************
  1117. *** 641,647 ****
  1118.   {
  1119.       nl();
  1120.       if (curseg != segtype) {
  1121. !     oprintf("\t.sect\t%s\n", segname);
  1122.       curseg = segtype;
  1123.       align_type = 0;
  1124.       }
  1125. --- 647,653 ----
  1126.   {
  1127.       nl();
  1128.       if (curseg != segtype) {
  1129. !     oprintf("\t%s\n", segname);
  1130.       curseg = segtype;
  1131.       align_type = 0;
  1132.       }
  1133. diff -w -c org/out68k_gas.c src/out68k_gas.c
  1134. *** org/out68k_gas.c    Wed Jun 15 15:50:29 1994
  1135. --- src/out68k_gas.c    Tue Jan 17 08:06:58 1995
  1136. ***************
  1137. *** 171,176 ****
  1138. --- 171,179 ----
  1139.       "scs",         /* op_slo */
  1140.       "sls",         /* op_sls */
  1141.       "st",        /* op_st */
  1142. + #ifdef TRAP_GEN
  1143. +     "trap",        /* op_trap */
  1144. + #endif /* TRAP_GEN */
  1145.       "#.line",    /* op_line */
  1146.       0,        /* op_label */
  1147.   };
  1148. ***************
  1149. *** 452,458 ****
  1150.       int             val;
  1151.   {
  1152.       put_header (wordgen, (SIZE)AL_SHORT);
  1153. !     oprintf(",%d", val & 0xffffff);
  1154.       outcol += 6;
  1155.   }
  1156.   
  1157. --- 455,461 ----
  1158.       int             val;
  1159.   {
  1160.       put_header (wordgen, (SIZE)AL_SHORT);
  1161. !     oprintf("%d", val & 0xffffff);
  1162.       outcol += 6;
  1163.   }
  1164.   
  1165. ***************
  1166. *** 572,577 ****
  1167. --- 575,581 ----
  1168.       else
  1169.       cseg();
  1170.       for ( ; strtab != 0; strtab = strtab->next) {
  1171. +     nl();
  1172.       put_label(strtab->label);
  1173.       cp = strtab->str;
  1174.       for (len = strtab->len; len--; )
  1175. ***************
  1176. *** 622,631 ****
  1177.   {
  1178.       static BOOL    init_done = 0;
  1179.       if (init_done == 0) {
  1180.       time_t time_of_day;
  1181.       VOIDCAST time (&time_of_day);
  1182.       init_done++;
  1183. !     oprintf("%s Generated by %s %s %s (%s) from \"%s\"\n",
  1184.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1185.   #ifdef VERBOSE
  1186.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1187. --- 626,637 ----
  1188.   {
  1189.       static BOOL    init_done = 0;
  1190.       if (init_done == 0) {
  1191. + #ifdef VERBOSE
  1192.       time_t time_of_day;
  1193.       VOIDCAST time (&time_of_day);
  1194. + #endif /* VERBOSE */
  1195.       init_done++;
  1196. !     oprintf("%s Generated by %s v%s, %s (%s) from \"%s\"\n",
  1197.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1198.   #ifdef VERBOSE
  1199.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1200. diff -w -c org/out68k_qmc.c src/out68k_qmc.c
  1201. *** org/out68k_qmc.c    Wed Jun 15 15:50:30 1994
  1202. --- src/out68k_qmc.c    Tue Jan 17 08:07:08 1995
  1203. ***************
  1204. *** 162,167 ****
  1205. --- 162,170 ----
  1206.       "SCS",         /* op_slo */
  1207.       "SLS",         /* op_sls */
  1208.       "ST",        /* op_st */
  1209. + #ifdef TRAP_GEN
  1210. +     "TRAP",        /* op_trap */
  1211. + #endif /* TRAP_GEN */
  1212.       "COMMENT",    /* op_line */
  1213.       0,        /* op_label */
  1214.   };
  1215. ***************
  1216. *** 640,646 ****
  1217.       time_t time_of_day;
  1218.       VOIDCAST time (&time_of_day);
  1219.       init_done++;
  1220. !     oprintf("%s Generated by %s %s %s (%s) from \"%s\"\n",
  1221.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1222.   #ifdef VERBOSE
  1223.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1224. --- 643,649 ----
  1225.       time_t time_of_day;
  1226.       VOIDCAST time (&time_of_day);
  1227.       init_done++;
  1228. !     oprintf("%s Generated by %s v%s, %s (%s) from \"%s\"\n",
  1229.           comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, act_file);
  1230.   #ifdef VERBOSE
  1231.       oprintf("%s Compilation date/time: %s\n", comment, ctime(&time_of_day));
  1232. diff -w -c org/peep68k.c src/peep68k.c
  1233. *** org/peep68k.c    Wed Jun 15 15:50:29 1994
  1234. --- src/peep68k.c    Tue Jan 17 08:07:18 1995
  1235. ***************
  1236. *** 427,435 ****
  1237. --- 427,437 ----
  1238.       peep_head = 0;
  1239.       for(sw=swtables; sw; sw=sw->next) {
  1240.       nl();
  1241. + #ifndef JAS_PATCH
  1242.       if (IandD_option)
  1243.           dseg();
  1244.       else
  1245. + #endif /* JAS_PATCH */
  1246.           cseg();
  1247.       put_align((SIZE)AL_POINTER);
  1248.       put_label(sw->tablab);
  1249. ***************
  1250. *** 442,451 ****
  1251.       }
  1252.   #else
  1253.       /* generate the switch jump table as a series of 2-byte offsets
  1254. !      * This limits the amount of code the can be generated in a
  1255.        * function to less then 32K.  I believe that this is a reasonable
  1256.        * restriction.
  1257.        */
  1258.       {
  1259.           EXPR      *ep, *ep1;
  1260.           ep1 = mk_lcon(sw->beglab);
  1261. --- 444,459 ----
  1262.       }
  1263.   #else
  1264.       /* generate the switch jump table as a series of 2-byte offsets
  1265. !      * This limits the amount of code that can be generated in a
  1266.        * function to less then 32K.  I believe that this is a reasonable
  1267.        * restriction.
  1268.        */
  1269. + #ifdef JAS_PATCH
  1270. +     for(i=0; i<sw->numlabs; i++) {
  1271. +         ep2->v.l = sw->labels[i];
  1272. +         put_short(ep2);
  1273. +     }
  1274. + #else
  1275.       {
  1276.           EXPR      *ep, *ep1;
  1277.           ep1 = mk_lcon(sw->beglab);
  1278. ***************
  1279. *** 455,460 ****
  1280. --- 463,469 ----
  1281.           put_short(ep);
  1282.           }
  1283.       }
  1284. + #endif /* JAS_PATCH */
  1285.   #endif /* RELOC_BUG */
  1286.       }
  1287.       swtables = NULL;
  1288. diff -w -c org/symbol.c src/symbol.c
  1289. *** org/symbol.c    Wed Jun 15 15:50:30 1994
  1290. --- src/symbol.c    Tue Jan 17 08:07:26 1995
  1291. ***************
  1292. *** 112,120 ****
  1293.   key(p)
  1294.       register char *p;
  1295.   {
  1296. !     register int  sum;
  1297.       for (sum=0; *p; )
  1298. !     sum += *p++;
  1299.       return (sum % MAXKEY);
  1300.   }
  1301.   
  1302. --- 112,120 ----
  1303.   key(p)
  1304.       register char *p;
  1305.   {
  1306. !     register unsigned int sum;
  1307.       for (sum=0; *p; )
  1308. !     sum += (sum << 5) + *p++;
  1309.       return (sum % MAXKEY);
  1310.   }
  1311.   
  1312. ***************
  1313. *** 482,488 ****
  1314.   endparamblock()
  1315.   {
  1316.       SYM *sp;
  1317. !     BLOCK *block = scope.local;;
  1318.       for (sp = block->symbols.head; sp != NULL; sp = sp->next) {
  1319.       deletesym(sp, symbols);
  1320.       }
  1321. --- 482,488 ----
  1322.   endparamblock()
  1323.   {
  1324.       SYM *sp;
  1325. !     BLOCK *block = scope.local;
  1326.       for (sp = block->symbols.head; sp != NULL; sp = sp->next) {
  1327.       deletesym(sp, symbols);
  1328.       }
  1329. diff -w -c org/version.h src/version.h
  1330. *** org/version.h    Wed Jun 15 15:50:30 1994
  1331. --- src/version.h    Fri Jan 27 23:51:28 1995
  1332. ***************
  1333. *** 1,3 ****
  1334. ! #define VERSION            "4.4"
  1335. ! #define LAST_CHANGE_DATE    "10 May 94"
  1336. --- 1,2 ----
  1337. ! #define VERSION            "4.4.5"
  1338. ! #define LAST_CHANGE_DATE    "25 Jan 95"
  1339.